﻿#region 命名空间
using System.Collections.ObjectModel;
using Microsoft.Xna.Framework.Content.Pipeline;
#endregion

namespace ContentFactory
{
    /// <summary>
    /// 提供自定义方法来报告内容导入程序或处理程序中的消息或警告。
    /// </summary>
    public class CustomContentBuildLogger : ContentBuildLogger
    {
        #region 字段

        /// <summary>
        /// 记录的日志消息。
        /// </summary>
        internal static readonly ObservableCollection<string> Messages;

        #endregion

        #region 初始化

        /// <summary>
        /// 初始化。
        /// </summary>
        static CustomContentBuildLogger()
        {
            Messages = new ObservableCollection<string>();
        }

        #endregion

        #region 方法

        /// <summary>
        /// 记录应用程序消息。
        /// </summary>
        internal static void Log(string message)
        {
            lock (Messages)
            {
                Messages.Add(message);
            }
        }

        #region 实现 ContentBuildLogger

        /// <summary>
        /// 从内容导入程序或处理程序输出高优先级状态消息。
        /// </summary>
        public override void LogImportantMessage(string message, params object[] messageArgs)
        {
            lock (Messages)
            {
                Messages.Add(string.Format("【重要】{0}", message));
            }
        }

        /// <summary>
        /// 从内容导入程序或处理程序输出低优先级状态消息。
        /// </summary>
        public override void LogMessage(string message, params object[] messageArgs)
        {
            lock (Messages)
            {
                Messages.Add(message);
            }
        }

        /// <summary>
        /// 从内容导入程序或处理程序输出警告消息。
        /// </summary>
        public override void LogWarning(string helpLink, ContentIdentity contentIdentity, string message, params object[] messageArgs)
        {
            lock (Messages)
            {
                Messages.Add(string.Format("【警告】{0}", message));
            }
        }

        #endregion

        #endregion
    }
}
